import { NestFactory, Reflector } from '@nestjs/core';
import { ValidationPipe, ClassSerializerInterceptor } from '@nestjs/common';
import { AppModule } from './app.module';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';

async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);

  // 配置静态文件服务，用于访问上传的文件，使用 Express 特有的静态文件服务功能
  app.useStaticAssets(join(__dirname, '..', 'uploads'), {
    prefix: '/uploads',
  });
  // 配置全局数据验证管道
  app.useGlobalPipes(
    new ValidationPipe({
      whitelist: true, // 自动过滤DTO中未定义的属性(会过滤掉未使用class-validator装饰器的属性)
      transform: true, // 自动将有效数据转换为DTO实例
    }),
  );
  // 配置全局拦截器
  app.useGlobalInterceptors(new ClassSerializerInterceptor(app.get(Reflector))); // 自动序列化响应数据
  await app.listen(process.env.PORT ?? 80, process.env.HOST ?? '0.0.0.0');
}
void bootstrap();
